package treeInspector;

import java.io.File;
import java.io.IOException;
import java.util.LinkedList; 

public class TreeInspector {

	// Chemins des fichiers partages sur le disque dur.
	private  String fichierArborescence;
	private  String arborescenceAnalysee;
	private  String dossierData;

	// Attributs necessaire a la comparaison des arborescences.
	private  LinkedList<String> arborescence = new LinkedList<String>();
	private  LinkedList<String> ancienneArbo = new LinkedList<String>();
	private  LinkedList<String> nouveauxElements =
			new LinkedList<String>();
	private  LinkedList<String> elementsSuprimmes = 
			new LinkedList<String>();

	FileOperator of = new FileOperator();

	public TreeInspector(String cheminArborescence) throws IOException {

		// Repertoire par defaut
		arborescenceAnalysee = cheminArborescence;
		initialisation();

	}

	public  LinkedList<String> getNouveauxElements() {
		return nouveauxElements;
	}

	public  LinkedList<String> getElementsSuprimmes() {
		return elementsSuprimmes;
	}

	public  LinkedList<String> getArborescence() {
		return arborescence;
	}

	private void initialisation() throws IOException {
		// Initialisation des emplacements des fichiers/dossiers
		fichierArborescence =
				"Data" + File.separatorChar
				+ "Arbo.txt";
		dossierData = "Data";

		(new File(dossierData)).mkdir();
		boolean fichierInitExiste = (new File(fichierArborescence)).exists();

		

		// Si il existe, lecture du fichier et mise en cache dans une LinkedList
		if (fichierInitExiste) {
			ancienneArbo = of.listerLigneFichier(fichierArborescence);
		} // Si il n'existe pas : Creation du fichier d'arborescence
		else {
			// On creer le fichier d'aroborescence, ancienneArbo sera vide, la
			// mise a jour se fera donc correctement (etant donne que
			// l'arborescence n'est pas connue, il faut notifier l'observateur
			// via la MaJ).
			arborescence = of.obtenirArborescence(arborescenceAnalysee);
			arborescence.clear();
		}
		
	}

	@SuppressWarnings("unchecked")
	public int mettreAJour() throws IOException {
		elementsSuprimmes.clear();
		nouveauxElements.clear();

		// Nettoyage et construction de l'arborescence du dossier f
		arborescence.clear();
		arborescence = of.obtenirArborescence(arborescenceAnalysee);

		// Comparaison des arborescences, l'ancienne arborescence a ete remplie
		// par le fichier d'initialisation.
		if (!arborescence.equals(ancienneArbo)) {
			of.enregistrerListe(arborescence, fichierArborescence);

			// Creation du fichier des nouveaux elements;
			nouveauxElements =
					of.obtenirNouvellesInformations(arborescence, ancienneArbo);

			// Creation du fichier des elements supprimes
			elementsSuprimmes =
					of.obtenirNouvellesInformations(ancienneArbo, arborescence);

			ancienneArbo = (LinkedList<String>) arborescence.clone();
			return 1;
		} else {
			ancienneArbo = (LinkedList<String>) arborescence.clone();
			return 0;
		}

	}

}
